<template>
  <div>
    <h1>路由跳转-user-{{ user }}</h1>
    <router-link to="">img</router-link>
    <!-- TODO:如何到user/2/img/133 -->
    <router-link to="/img/133">img1</router-link>
    <router-link to="/user/2/img/2">
      <a>img2</a>
    </router-link>
    <router-link to="/user/2/img/3">img3</router-link>
    <hr>
    <button @click="router1()">path跳转到img2</button>
    <button @click="router2(2)">传参跳转到img2</button>
    <button @click="router2(3)">传参跳转到img3</button>
    <button @click="router3()">img-vip</button>
    <button @click="router4(true)">img-非vip</button>
    <router-view></router-view>
    <router-view name="vip" v-if="vip"/>
    <!-- <router-view name="user"/> -->
  </div>
</template>

<script>
export default {
  props: ['user'],
  data () {
    return {
      transitionName: '',
      vip: false
    }
  },
  watch: {
    '$route' (to, from) {
      if (to.params.vip === true) {
        this.vip = true
      } else {
        this.vip = false
      }
    }
  },
  beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不！能！获取组件实例 `this`
    // 因为当守卫执行前，组件实例还没被创建
    console.log('enter')
    next(vm => {
      // 通过 `vm` 访问组件实例
      console.log(vm.user)
      // console.groupEnd()
    })
  },
  beforeRouteUpdate (to, from, next) {
    // 在当前路由改变，但是该组件被复用时调用
    // 举例来说，对于一个带有动态参数的路径 /foo/:id，在 /foo/1 和 /foo/2 之间跳转的时候，
    // 由于会渲染同样的 Foo 组件，因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
    console.group('update')
    console.log(this.user)
    console.groupEnd()
    next()
  },
  beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
    console.group('leave')
    console.log(this.user)
    console.groupEnd()
    const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
    if (answer) {
      next()
    } else {
      next(false)
    }
  },
  methods: {
    router1 () {
      // TODO:如何到/user/2/img/133
      this.$router.push('img/2')
    },
    router2 (n) {
      this.$router.push({name: 'img', params: { img: n }})
    },
    router3 () {
      this.$router.push({name: 'img', params: { img: 'vip', vip: true }})
    },
    router4 () {
      this.$router.push({name: 'imgVip', params: { img: '穷人', vip: false }})
    }
  }
}
</script>

<style lang="scss">
// 路由链接激活时使用的 CSS 类名
.router-link-active{
  color: red;
}
</style>
